#ifndef ONLINEMUSICWIDGET_H
#define ONLINEMUSICWIDGET_H

#include <QWidget>
#include <QPainter>
#include <QRect>
#include <QMessageBox>
#include <QString>

// 使用该类可以进行网络请求、获取响应、处理错误等操作
#include <QNetworkAccessManager>
// QNetworkReply是QNetworkAccessManager发送请求之后返回的响应类
#include <QNetworkReply>

// 添加多媒体播放器类
#include <QMediaPlayer>
// 添加多媒体播放列表类
#include <QMediaPlaylist>

#include <QTextBlock>
#include <QTimer>
#include <QFileDialog>

// 用于解析JSON数据时错误处理类
#include <QJsonParseError>
// 用于操作JSON数组的类
#include <QJsonObject>

#include <QLCDNumber>
#include <QJsonArray>
//鼠标事件响应
#include <QMouseEvent>

#include "aboutdialog.h"

QT_BEGIN_NAMESPACE
namespace Ui { class onlineMusicWidget; }
QT_END_NAMESPACE

class onlineMusicWidget : public QWidget
{
    Q_OBJECT

public:
    onlineMusicWidget(QWidget *parent = nullptr);
    ~onlineMusicWidget();


    //处理播放器背景画布
    void paintEvent(QPaintEvent *event);

    //鼠标拖动
    void mousePressEvent(QMouseEvent *event);
    void mouseMoveEvent(QMouseEvent *event);
    void mouseReleaseEvent(QMouseEvent *event);
    bool m_MouseDrag;
    QPoint mouseStartPoint; //获得鼠标的初始位置
    QPoint widgetStartPoint; //获取窗口的初始位置

    QMediaPlayer *PlayerObjects; //定义多媒体播放器对象
    QMediaPlaylist *P_playerList;  //定义多媒体播放列表

    QByteArray QByteArySearchInfo; //存储搜索数据信息
    QString StrLocalMusicPath; //本地音乐路径

    //歌曲ID
    int I_MusicID;
    int iPos;  //播放标记
    //歌曲名称，歌手姓名
    QString StrMusicName,StrSingerName;

    QTextDocument *docTextObject; //处理富文本内容
    QTextBlock *qTextLine;  //处理文本块指针

    QNetworkAccessManager *NetworkAccessManagers;

    //处理动态字幕
    QString strTitles;
    int iTitleChar;

//自定义槽函数
public slots:
    //处理数据信息返回函数
    void HandleDataBackFunc(QNetworkReply *pReply);
    //处理LCDNumber控件时间
    void HandleLCDNumberTimeChangeFunc(qint64 duration);
    //处理进度条控件变化
    void HandleProgressTimeChangeFunc(qint64 duration);
    //处理播放位置变化
    void HandlePositionChangeFunc(qint64 position);

    //处理播放歌曲
    void HandlePlaySongFunc();

    //实现字幕动态变化
    void titleMoveCaptionChar();



private slots:
    void on_plainTextEdit_3_textChanged();

    void on_pushButton_Exit_clicked();

    void on_pushButton_Dectory_clicked();

    void on_pushButton_About_clicked();

    void on_pushButton_Search_clicked();

    void on_pushButton_PlaySong_clicked();

    void on_pushButton_PauseSong_clicked();

    void on_pushButton_Stop_PlaySong_clicked();

    void on_pushButton_PreviousSong_clicked();

    void on_pushButton_NextSong_clicked();

    void on_pushButton_closeSong_clicked();

    //void on_horizontalSlider_Song_actionTriggered(int action);

    void on_horizontalSlider_Song_valueChanged(int value);

    void on_horizontalSlider_valueChanged(int value);

private:
    Ui::onlineMusicWidget *ui;
};

#endif // ONLINEMUSICWIDGET_H
